How Blitz scaled their game coaching app with lower latency and leaner operations League of Legends、Valorant、Fortniteなどのゲームにパーソナライズされたコーチングを提供する急速に成長するスタートアップです. 彼らは、リアルタイムの洞察と試合後の分析を通じて、プレイヤーがLeague of Legendsの伝説になるのを助けることを目指しています。 ライト プレイヤーがプレイしている間、アプリはかなり多くの仕事をします。ライブマッチデータをキャプチャし、迅速に分析し、リアルタイムのゲームスクリーンアップロードとパーソナライズされたゲーム後のコーチングに使用します。 Blitzの人気の統計とゲームコーチングアプリの認識が増加することにより、彼らの徐々に増加するユーザーベースは、彼らのオリジナルのPostgresとElixirベースのアーキテクチャを限界にまで押し上げた。 低遅延、高可用性、および成長するユーザーベースに水平スケーラビリティを提供するために、彼らは最終的に: TL;DR バックエンドサービスをElixirからRustに移行。 Postgres を ScyllaDB Cloud に置き換えました。 足跡を大幅に減らした。 Riak Clusterを削除しました。 リアルタイムの処理に代わるコード処理。 100 以上のマイクロサービスコアから 4 つの n4‐standard‐4 Google Cloud ノードまで統合されたインフラストラクチャ(エッジキャッシュ用の小さな Redis インスタンス) 追加のボーナスとして、これらの変更はBlitzのインフラストラクチャコストを削減し、エンジニアリングスタッフのデータベース負荷を減らしました。 BLITZ 背景 Naveed Khan(Blitzのエンジニアリング責任者)が説明したように、「我々はゲームの出版社から多くのデータを収集し、ゲームプレイ中に多くのデータを収集します。例えば、あなたがLeague of Legendsをプレイしている場合、我々はリオットのAPIを使用してマッチデータを抽出し、アプリをインストールする場合、我々はまたリアルタイムでゲームプレイを監視します。 Scaling Past ポストグレース Blitzのシステムの重要な部分はPlaystyles APIで、チームメイトと対戦相手のプレミアムデータを分析します。この集中的なプロセスはプレイヤーごとに最大20試合を評価し、試合ごとに9回ずつ実行されます(試合中のプレイヤーごとに1回)。チームは戦略的に複数のマイクロサービスを再構築し、統合してパフォーマンスを向上しました。しかし、データの量は激しくなりました。Brian Morin(Blitzの主要バックエンドエンジニア)によると、「このクエリの量を処理できるデータベースソリューションを見つけることが重要でした」 彼らは当初 Postgres を使用し、早期に十分にサービスを提供していました。しかし、書き込みの重量のワークロードが拡大するにつれて、Google Cloud の運用複雑さとコストは大幅に増加しました。さらに、Postgres のスケーリングはかなり複雑になりました。Naveed は、「私たちはあらゆる種類のものをスケーリングするように試みました。私たちは、必要なスケールを得るために Postgres 周囲に複数のサービスを構築しました: Redis クラスタ、Riak クラスタ、Elixir Oban 列が時々溢れていました。 スタートアップが規模を拡大するにつれて、彼らはしばしば「Postgres を使用するだけ」から「NoSQL を使用するだけ」に切り替わります。適切に、Blitz チームは MongoDB に移行することを検討しましたが、最終的にそれを排除しました。 「私たちはチームで多くの MongoDB 経験を持っており、私たちの一部はそれを本当に気に入りました。 彼らの特定のワークロードと予想される成長のためのボトルネックを作り出します。 MongoDBの主次元アーキテクチャ テストでは、彼らの遅延需要を満たすことが示されたため、彼らは必要なデータ(再)モデリングを実行し、PostgresからRocksDBにいくつかの小さなゲームを移行しました。しかし、彼らは最終的に規模と高可用性の懸念のためにRocksDBに反対しました。 なぜ ScyllaDB 彼らのバックエンドのエンジニアの1人はScyllaDBを提案したので、彼らはコンセプトの証明を実行し、主に書き込みのスケールを水平にスケールし、高可用性を提供できるソリューションを探していました。 彼らは最初に自分のハードウェアでテストし、その後ScyllaDB Cloudに移行しました。 Per Naveedによると、「コストは自社ホスティングにかなり近いもので、完全な管理を無料で手に入れたので、ノーブレイナーでした。私たちは今、Redisクラスターを大幅に削減し、RiackクラスターとOban列の依存性を解消しました。 パフォーマンス面で、この変更はユーザー体験をレベルアップするという目標を達成し、エンジニアリングチームの生活を簡素化しました。ブライアンは「ScyllaDBはパフォーマンスを高め、最適化後の保存能力を提供して、強力なパフォーマンスを提供しました。私たちのリーグ製品は約5kオプション/秒でクラスターの負荷が20%未満でレベルアップしました。私たちの最大の制約はディスク使用で、これを軽減するために複数のアップデートを展開してきました。新しいシステムは、キャッシュされたデータに頼る代わりにすぐに結果を返すことができ、他のプレイヤーに関するより最新の情報を提供し、さらには頻繁にチームメイトを識別します。この移行の結果は印象的です:100以上のマイク High-Level Architecture of Blitz Server with Rust and ScyllaDB Elixir Services を Rust に書き換える 主要なバックエンドの改修の一環として、Blitzチームはそのインフラストラクチャ全体を再考し始めました - 以前述べたポストグレスから高性能で分散型のScyllaDBへの移行を超えて。このデータベース移行に加えて、Elixirベースのサービスをより近代的な言語に優先することを選択しました。慎重な評価の後、Rustは明らかな選択肢として現れました。 最初のバンドのRustの再書き換えサービスが生産中である今、Naveedとチームは振り返らない: “Rustは素晴らしいです. それは素早く、コンパイラは後でゴミ収集の問題をデバッグする代わりにメモリセキュアなコードを事前に書くように強制します. パフォーマンスはCと比較され、才能のプールもElixirと比べてはるかに大きい。